// src/stores/partner.js（修复版）
import { defineStore } from 'pinia'
import { ref, computed } from 'vue'
import request from '@/utils/request' // 你的请求工具

// 默认头像链接（若解析失败，可替换为本地图片，如 '/src/assets/default-avatar.png'）
const DEFAULT_AVATAR = 'https://placehold.co/50x50/cccccc/ffffff?text=头像'

export const usePartnerStore = defineStore('partner', () => {
  // 1. 补全核心状态：新增 activePartnerKey（当前选中的伙伴ID）
  const partners = ref([]) // 所有伙伴列表（接口返回）
  const activePartnerKey = ref('') // 补全：当前选中的伙伴ID（跨组件共享）
  const isLoading = ref(false) // 加载状态

  // 2. 补全计算属性：activePartners（筛选活跃伙伴）
  const activePartners = computed(() => {
    return partners.value.filter(p => p.isActive)
  })

  // 3. 核心方法：调用 /getPartnerInfo 接口加载伙伴数据
  const fetchPartners = async (userId) => {
    if (!userId) return false // 校验用户ID（避免无效请求）
    isLoading.value = true
    try {
      // 调用后端接口（和你原 getPartnerInfo 逻辑一致）
      const res = await request.get('/getPartnerInfo', {
        params: { userId } // 传当前登录用户ID，获取其伙伴列表
      })

      // 格式化数据（和原逻辑一致：用 partnerId 当唯一ID，补默认头像）
      partners.value = res.data.map(item => ({
        ...item,
        id: String(item.partnerId), // 确保ID是字符串，避免类型问题
        avatar: item.avatar || DEFAULT_AVATAR, // 无头像时用默认图
        isActive: item.isActive || false // 后端未返回时默认为非活跃
      }))

      // 初始化：默认选中第一个伙伴（和原逻辑一致）
      if (partners.value.length > 0) {
        activePartnerKey.value = partners.value[0].id
      }
      return true // 加载成功
    } catch (error) {
      console.error('获取伙伴信息失败:', error)
      // 错误处理（和原逻辑一致：返回“加载失败”的占位数据）
      partners.value = [{
        id: '0',
        avatar: DEFAULT_AVATAR,
        nickname: '加载失败',
        major: '',
        intro: '请刷新页面重试'
      }]
      return false // 加载失败
    } finally {
      isLoading.value = false // 无论成功失败，关闭加载状态
    }
  }

  // 4. 原有方法：添加伙伴（格式统一）
  function addPartner(partnerData) {
    const formatted = {
      ...partnerData,
      id: partnerData.id || String(partnerData.partnerId), // 补全ID
      avatar: partnerData.avatar || DEFAULT_AVATAR, // 补全默认头像
      isActive: partnerData.isActive || false
    }
    partners.value.push(formatted)
  }

  // 5. 原有方法：删除伙伴（自动切换选中项）
  function removePartner(id) {
    partners.value = partners.value.filter(p => p.id !== id)
    // 若删除的是当前选中伙伴，自动切到第一个（和原逻辑一致）
    if (activePartnerKey.value === id && partners.value.length > 0) {
      activePartnerKey.value = partners.value[0].id
    }
  }

  // 6. 新增：切换选中伙伴（供组件调用）
  function setActivePartner(id) {
    activePartnerKey.value = id
  }

  return {
    // 导出状态（补全 activePartnerKey 和 activePartners）
    partners,
    activePartnerKey,
    isLoading,
    activePartners,
    // 导出方法
    fetchPartners,
    addPartner,
    removePartner,
    setActivePartner
  }
})
